#ifndef __sk6812_SIP_H
#define __sk6812_SIP_H

#ifdef __cplusplus
extern "C"
{
#endif

#include "main.h"
#include <stdint.h>

//            编码 0 : 11000000
#define CODE_0 0xc0
//            编码 1 : 11111000
#define CODE_1 0xF8
/*ws2812b灯珠数量*/
#define WS2812B_AMOUNT 30

    typedef struct
    {
        uint8_t R;
        uint8_t G;
        uint8_t B;
    } tWs2812bCache_TypeDef;


    extern SPI_HandleTypeDef Spi1Handle;
    extern tWs2812bCache_TypeDef gWs2812bDat[WS2812B_AMOUNT];
    void WS2812b_Set(uint16_t Ws2b812b_NUM, uint8_t r, uint8_t g, uint8_t b);
    void WS2812B_Task(void);

    // 渐变的更新LED颜色
    void ws2812_gradient(tWs2812bCache_TypeDef target_colors[], uint8_t steps, uint16_t delay_ms);
    // 原有的阻塞式函数（保留兼容性）
    // 彩虹渐变效果
    void rainbow_gradient(uint8_t steps, uint16_t delay_ms);
    // 统一颜色渐变效果
    void uniform_gradient(uint8_t steps, uint16_t delay_ms);
    // 彗星效果
    void comet_effect(uint8_t tail_length, uint8_t brightness, uint16_t delay_ms);
    // 红色掉落变绿堆积效果
    void WS2812B_red_to_green_stack(uint16_t delay_ms);
    // Red Wave纯红色波浪效果
    void red_wave_effect(uint16_t delay_ms);
    // Red Green Wave红绿波浪效果
    void red_green_wave_effect(uint16_t delay_ms);
    // Rainbow wave彩虹波浪效果
    void rainbow_wave_effect(uint16_t delay_ms);

    // 新的非阻塞式函数（状态机方式）
    void rainbow_gradient_update(void);
    void uniform_gradient_update(void);
    void comet_effect_update(void);
    void red_to_green_stack_update(void);
    void red_wave_update(void);
    void red_green_wave_update(void);
    void rainbow_wave_update(void);
    void effect_reset(void);  // 重置灯效状态

    // HSV转RGB颜色转换函数
    void hsv_to_rgb(float h, float s, float v, uint8_t *r, uint8_t *g, uint8_t *b);
#ifdef __cplusplus
}
#endif

#endif /* __sk6812_SIP_H */
